package com.urbane.dto.services.user;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 用户基础信息 DTO（脱敏版）
 * 功能：
 *   - 所有服务返回用户信息时统一使用此结构
 *   - 避免暴露手机号、身份证、邮箱等敏感字段
 *   - 适用于登录、查询、展示等场景
 *
 * 注意：
 *   - 所有字段均为只读，不可修改
 *   - 邮箱、电话需脱敏显示（如 z***@example.com）
 *   - 不包含 passwordHash、lastLoginAt 等敏感字段
 */
@Data
@Schema(description = "用户基础信息（脱敏）")
public class UserBaseInfo {

    /**
     * 用户唯一 ID（主键）
     */
    @Schema(description = "用户唯一标识符", example = "123")
    private Long id;

    /**
     * 登录用户名（系统内部使用）
     */
    @Schema(description = "登录账号，用于系统内部识别", example = "zhangsan")
    private String username;

    /**
     * 显示昵称（前端展示用）
     */
    @Schema(description = "用户在界面上显示的名字", example = "小张")
    private String nickname;

    /**
     * 头像 URL（CDN 地址）
     */
    @Schema(description = "头像图片 URL", example = "https://cdn.example.com/avatar/123.jpg")
    private String avatar;

    /**
     * 脱敏后的邮箱（如 z***@example.com）
     */
    @Schema(description = "脱敏后的邮箱地址", example = "z***@example.com")
    private String email;

    /**
     * 角色列表（如 ["USER", "ADMIN"]）
     */
    @Schema(description = "用户角色列表", example = "[\"USER\"]")
    private java.util.List<String> roles;

    /**
     * 会员等级
     */
    @Schema(description = "会员等级", example = "NORMAL")
    private String level;

    /**
     * 注册时间
     */
    @Schema(description = "账户注册时间", example = "2024-01-01T00:00:00Z")
    private LocalDateTime createdAt;
}
